//go:build linux

package gogo

import (
	"crypto/tls"
	"go2/log"
	"gogo/http_v3"
	"net/http"
	"strconv"
)

func SetLogLevel(level int) {
	log.SetLogLevel(level)
}

// StartV3HTTP 启动GoHTTP服务
// 参数:
//
//	port: 服务监听的端口号
//	thread_count: 处理请求的 协程/线程 数量
//
// 返回值:
//
//	error: 启动过程中可能发生的错误
func StartV3HTTP(port int, thread_count int) error {
	return StartV3HTTPS2(&http.Server{
		Addr: ":" + strconv.Itoa(port),
	}, thread_count)
}

// StartV3HTTPS 启动GoHTTPS服务
// 参数:
//
//	port: 服务监听的端口号
//	certFile: SSL证书文件路径
//	keyFile: SSL密钥文件路径
//	thread_count: 处理请求的 协程/线程 数量
//
// 返回值:
//
//	error: 启动过程中可能发生的错误
func StartV3HTTPS(port int, certFile, keyFile string, thread_count int) error {
	cert, err := tls.LoadX509KeyPair(certFile, keyFile)
	if err != nil {
		return err
	}
	return StartV3HTTPS2(&http.Server{
		Addr: ":" + strconv.Itoa(port),
		TLSConfig: &tls.Config{
			Certificates:       []tls.Certificate{cert},
			InsecureSkipVerify: true,
		},
	}, thread_count)
}

// StartV3HTTPS2 启动GoHTTPS服务
// 参数:
//
//	server: HTTP服务器配置
//	thread_count: 处理请求的 协程/线程 数量
//
// 返回值:
//
//	error: 启动过程中可能发生的错误
func StartV3HTTPS2(server *http.Server, thread_count int) error {
	log.Infof("GoGo V3 Running on %s", server.Addr)

	if thread_count <= 0 {
		thread_count = 1
	}

	server.Handler = mpHttpRouterHandler
	if err := http_v3.NewGoHttp().Start(server, thread_count); err != nil {
		return err
	}
	return nil
}
